/*
共用体 也称为 联合体
    共用体类型声明
        union 共用体类型名
        {
        成员;
        };
    共用体类型变量
    union 共用体类型名 变量名;
一个能在同一个存储空间存储不同类型数据的举型,所有成员公用一片内存空间，改变其中一个成员会对其他成员的数据造成影响
共用体内存大小以最大成员大小为准
*/
#include <stdio.h>
union categ
{
    int classes;//班级
    char position[10];//职务
};
struct p
{
    int num;//号码
    char name[10];//姓名
    char sex;//性别
    char job;//职业
    union categ categroy;
}person[2];//声明了一个结构体类型 存储个人信息 并定义一个含有2个元素的数组
void InputData(void)
{
    int i;
    for(i=0;i<2;i++)
    {
        printf("号码：");
        scanf("%d",&person[i].num);
        getchar();
        printf("姓名：");
        scanf("%s",person[i].name);
        getchar();
        printf("性别：");
        scanf("%c",&person[i].sex);
        getchar();
        printf("职业：s/t");
        scanf("%c",&person[i].job);
        getchar();
        //对职业进行判断
        if(person[i].job=='s'||person[i].job=='S')
        {
            printf("输入班级：");
            scanf("%d",&person[i].categroy.classes);
        }
        else if(person[i].job=='t'||person[i].job=='T')
        {
            printf("输入职务：");
            scanf("%s",person[i].categroy.position);
        }
    }
}
void OutputData(void)
{
    int i;
    //输出列表中的个人信息详细数据
    for(i=0;i<2;i++)
    {
        printf("号码:%d\t 姓名:%s\t 性别:%c\t",person[i].num,person[i].name,person[i].sex);
        if(person[i].job=='s'||person[i].job=='S')
        {
            printf("职业:学生\t 班级:%d\n",person[i].categroy.classes);
        }
        else if(person[i].job=='t'||person[i].job=='T')
        {
            printf("职业:教师\t 职务:%s\n",person[i].categroy.position);
        }
    }
}
int main(void)
{
    InputData();
    OutputData();
    return 0;
    
}